//package org.zffc.config;
//
//import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule;
//import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager;
//import com.alibaba.csp.sentinel.slots.block.RuleConstant;
//import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule;
//import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRuleManager;
//import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
//import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
//import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreakerStrategy;
//import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule;
//import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRuleManager;
//import com.alibaba.csp.sentinel.slots.system.SystemRule;
//import com.alibaba.csp.sentinel.slots.system.SystemRuleManager;
//import org.springframework.context.annotation.Configuration;
//
//import javax.annotation.PostConstruct;
//import java.util.*;
//
///**
// * @Description:
// * demo
// * 在启动时加载限流规则
// * @Note: 配置限流规则
// * @Author: zhangfei
// * @Date: 2025/2/24 16:57
// **/
//@Configuration
//public class SentinelConfig {
//    @PostConstruct
//    public void initGatewayRules() {
//        Set<GatewayFlowRule> rules = new HashSet<>();
//
//        // 定义限流规则
//        GatewayFlowRule rule = new GatewayFlowRule("zffc-demo")
//                .setCount(1) // 每秒最多 1 个请求
//                .setIntervalSec(1) // 统计时间窗口，单位是秒
//                .setBurst(5) // 允许的突发流量
//                .setGrade(RuleConstant.FLOW_GRADE_QPS); // 限流阈值类型（QPS）
//
//        rules.add(rule);
//
//        // 加载规则
//        GatewayRuleManager.loadRules(rules);
//    }
//
//    @PostConstruct
//    public void initDegradeRules() {
//        List<DegradeRule> rules = new ArrayList<>();
//
//        // 定义熔断规则
//        DegradeRule rule = new DegradeRule("zffc-demo")
//                .setGrade(CircuitBreakerStrategy.ERROR_RATIO.getType()) // 熔断策略（错误比例）
//                .setCount(0.5) // 错误比例阈值（50%）
//                .setTimeWindow(10) // 熔断恢复时间窗口（10 秒）
//                .setMinRequestAmount(5) // 最小请求数
//                .setStatIntervalMs(10000); // 统计时间窗口（10 秒）
//
//        rules.add(rule);
//
//        // 加载规则
//        DegradeRuleManager.loadRules(rules);
//    }
//
//    @PostConstruct
//    public void initSystemRule() {
//        // 创建系统保护规则
//        SystemRule rule = new SystemRule();
//        rule.setHighestCpuUsage(0.8); // CPU 使用率阈值 80%
//        rule.setHighestSystemLoad(4.0); // 系统负载阈值 4.0
//        rule.setQps(100); // 入口 QPS 阈值 100
//        // 加载规则
//        SystemRuleManager.loadRules(Collections.singletonList(rule));
//    }
//
//    @PostConstruct
//    public void initParamFlowRules() {
//        // 创建热点参数限流规则
//        ParamFlowRule rule = new ParamFlowRule("zffc-demo")
//                .setParamIdx(0) // 参数索引（第 0 个参数）
//                .setCount(1);  // 每秒最多 10 个请求
//
//        // 加载规则
//        ParamFlowRuleManager.loadRules(Collections.singletonList(rule));
//    }
//
//    @PostConstruct
//    public void initAuthorityRules() {
//        AuthorityRule rule = new AuthorityRule();
//        rule.setResource("zffc-demo");
//        rule.setStrategy(RuleConstant.AUTHORITY_BLACK);
//        rule.setLimitApp("localhost"); // 新增黑名单 IP
//        AuthorityRuleManager.loadRules(Collections.singletonList(rule));
//    }
//}
